
women <- read.csv("demo1.csv")

women

plot(women$height, women$weight) # 单位 英镑，英寸

# fit <- lm(weight ~ height, data = women) 指定了数据集合就不用写完整的变量调用了
fit <- lm(women$weight ~ women$height) # 这是最简单的线性关系假设，lm会根据一些数学计算做拟合

fit

summary.lm(fit)
# Residuals: 残差值
# ...

women1 <- women
predict(fit, women1) # 根据拟合结果，做预测

plot(fit) # 会生成四幅图

abline(fit)

# 拟合精度会根据表达式的猜测有差别，表达式给的越好，拟合可能越趋近于变化，多加一个变量的2次方再拟合
fit2 <- lm(weight ~ height + I(height^2), data = women)

fit2
summary.lm(fit2)
# Multiple R-squared:  0.9995 可以看到这次拟合数据更接近了

# 绘制fit2的拟合曲线

# lines(women$height, fitted(fit2), col="red") 好像没生效，后面再看看如何生成此图

# 还可以继续提高精度拟合，需要注意的是不是越提高精度越好
# 欠拟合，模型过于简单，训练的时候就会发现缺失精度
# 过拟合，模型过于复杂，对训练模型过于精确，而再测试集上变现糟糕，像"死记硬背"
# 选择合理的模型进行拟合很重要
fit3 <- lm(weight ~ height + I(height^2) + I(height^3), data = women)